﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Ferreteria.Forms.Gestion_de_Proveedores
{
    public partial class FrmAgregarArticulos : Form
    {
        DisancoEntities context;

        //Tipos de busqueda
        const string nombre_y_categoria = "Nombre o Categoria";
        const string nombre = "Nombre del Articulo";
        const string categoria = "Categoría";
        const string rubro = "Rubro";
        const string codigo = "Código";

        //DataGridView tablaArticulos;
        int provId;

        Proveedores Prov;
        ArticulosdeCompra ArtCompra;

        public FrmAgregarArticulos(int prov_id)
        {
            InitializeComponent();

                     
            cmbCategorias.Items.Add(nombre);
            cmbCategorias.Items.Add(codigo);
            cmbCategorias.SelectedIndex = 0;
            dgvArticulos.AutoGenerateColumns = false;

            this.provId = prov_id;

            cargarTabla();
            txbBuscar.Focus();
            txbBuscar.Select();

        }

        public FrmAgregarArticulos()
        {
            // TODO: Complete member initialization
        }

        private void txbBuscar_TextChanged(object sender, EventArgs e)
        {
            buscar();
        }

        private void cargarTabla()
        {
            try
            {
                context = new DisancoEntities(Ferreteria.Clases.Constantes.cadenaConexion);

                //dgvArticulos.DataSource = context.VistaArticulos.Top("100");
                //dgvArticulos.DataSource = context.VistaArticulosCompra.Top("200");
                dgvArticulos.DataSource = context.Vista_SoloArticulosCompra.Top("150");

                dgvArticulos.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
                dgvArticulos.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
                txbBuscar.Focus();
                txbBuscar.Select();

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        void buscar()
        {
            if (txbBuscar.Text == "")
            {
                cargarTabla();
            }
            else
            {
                if (txbBuscar.Text.Length > 2)
                {
                    try
                    {
                        context = new DisancoEntities(Ferreteria.Clases.Constantes.cadenaConexion);

                        //IEnumerable<VistaArticulos> articulosQuery;
                        IEnumerable<VistaArticulosCompra> articuloscQuery;
                        string cadena = txbBuscar.Text;
                        string tipo_busqueda = (string)cmbCategorias.SelectedItem;

                        switch (tipo_busqueda)
                        {
                            //case categoria:
                            //    articulosQuery = from vista in context.VistaArticulos
                            //                     where vista.categ_nombre.Contains(cadena)
                            //                     select vista;
                            //    break;
                            //case rubro:
                            //    articulosQuery = from vista in context.VistaArticulos
                            //                     where vista.rubro_nombre.Contains(cadena)
                            //                     select vista;
                            //    break;

                            case codigo:
                                articuloscQuery = from vista in context.VistaArticulosCompra
                                                  where vista.artc_codigo.Contains(cadena)
                                                  select vista;
                                break;
                            case nombre:
                                articuloscQuery = from vista in context.VistaArticulosCompra
                                                  where vista.artc_descripcion.Contains(cadena)
                                                  select vista;
                                break;
                            default:
                                articuloscQuery = from vista in context.VistaArticulosCompra
                                                  where vista.artc_descripcion.Contains(cadena) || vista.artc_codigo.Contains(cadena)
                                                  select vista;
                                break;
                        }

                        dgvArticulos.DataSource = articuloscQuery;
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message);
                    }
                }
            }
        }

        private void btnLimpiar_Click(object sender, EventArgs e)
        {
            cmbCategorias.SelectedIndex = 0;
            txbBuscar.Text = "";
            numPrecio.Value = 0;
            numBonif.Value = 0;
            cargarTabla();
        }

        private void FrmAgregarArticulos_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                e.Handled = true;

                this.btnBuscar_Click(sender, e);
            }

            if (e.KeyCode == Keys.F4)
            {
                e.Handled = true;
                txbBuscar.Focus();
                txbBuscar.Select();
            }

            if (e.KeyCode == Keys.F5)
            {
                e.Handled = true;
                btnLimpiar_Click(sender, e);
                txbBuscar.Focus();
                txbBuscar.Select();
            }
        }

        private void btnBuscar_Click(object sender, EventArgs e)
        {
            buscar();
        }

        private void btnClose_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void btnAddArt_Click(object sender, EventArgs e)
        {
            AddArt();
            btnLimpiar_Click(sender, e);

        }

        private void AddArt()
        {
            if (!(numBonif.Value.ToString() == " "))// deboooo validar que no sea NULLL el texttt
            {
                if (!(numPrecio.Value.ToString() == " ")) // deboooo validar que no sea NULLL el texttt
                {
                    if (dgvArticulos.SelectedRows.Count > 0)
                    {
                        try
                        {
                            int artId = (int)dgvArticulos.CurrentRow.Cells["artc_id"].Value;
                            decimal artPrecio = numPrecio.Value;
                            decimal artBonif = numBonif.Value;
                            //string artNombre = (string)dgvArticulos.CurrentRow.Cells["art_nombre"].Value;

                            //int idx = this.tablaArticulos.Rows.Add();
                            //this.tablaArticulos.Rows[idx].Cells["art_id"].Value = artId;
                            //this.tablaArticulos.Rows[idx].Cells["art_nombre"].Value = artNombre;
                            //this.tablaArticulos.Rows[idx].Cells["art_precio_lista"].Value = 0;
                            //this.tablaArticulos.Rows[idx].Cells["art_bonif"].Value = 0;
                            //this.tablaArticulos.Rows[idx].Cells["art_precio_bonificado"].Value = 0;
                            using (context = new DisancoEntities(Ferreteria.Clases.Constantes.cadenaConexion))
                            {

                                if (!context.CatalogoProv.Any(ac => ac.artcid == artId & ac.provid == provId))
                                {
                                    Prov = context.Proveedores.FirstOrDefault(a => a.prov_id == provId);
                                    ArtCompra = context.ArticulosdeCompra.FirstOrDefault(b => b.artc_id == artId);

                                    CatalogoProv newArtenCatalogo = new CatalogoProv();
                                    newArtenCatalogo.catalogobonifart = numBonif.Value / 100;
                                    decimal descuento = (numBonif.Value / 100);
                                    newArtenCatalogo.catalogoprecioart = numPrecio.Value;
                                    decimal PrecioArt = Convert.ToDecimal(numPrecio.Value);
                                    newArtenCatalogo.catalogopreciobon = Ferreteria.Clases.Funcion.SubtotDescuento(PrecioArt, descuento);
                                    newArtenCatalogo.provid = Prov.prov_id;
                                    newArtenCatalogo.artcid = ArtCompra.artc_id;
                                    context.CatalogoProv.AddObject(newArtenCatalogo);
                                    context.SaveChanges();

                                    MessageBox.Show("Articulo agregado al Catalogo con Exito", "Disanco Sanitarios", MessageBoxButtons.OK, MessageBoxIcon.Information);

                                }
                                else
                                {
                                    MessageBox.Show("El articulo ya se encuentra en el Catalogo. No se pueden agregar articulos duplicados", "Disanco Sanitarios", MessageBoxButtons.OK, MessageBoxIcon.Error);
                                    numPrecio.Value = 0;
                                    numBonif.Value = 0;
                                }
                                //if (!context.ProveedoresxArticulos.Any(pa => pa.art_id == artId && pa.prov_id == this.provId))
                                //{
                                //    ProveedoresxArticulos art_prov = new ProveedoresxArticulos();

                                //    art_prov.art_id = artId;
                                //    art_prov.prov_id = provId;
                                //    art_prov.prov_art_precio = numPrecio.Value;
                                //    art_prov.prov_art_bonif = numBonif.Value / 100;

                                //    context.ProveedoresxArticulos.AddObject(art_prov);
                                //    context.SaveChanges();
                                //    MessageBox.Show("Articulo agregado con exito", "Disanco Sanitarios", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                //    numPrecio.Value = 0;
                                //    numBonif.Value = 0;
                                //}

                            }
                        }


                        catch (Exception err)
                        {
                            MessageBox.Show(err.ToString());
                        }
                    }
                }
            }
        }

        private void dgvArticulos_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                e.Handled = true;
                numPrecio.Focus();
                numPrecio.Select();
            }
        }

        private void dgvArticulos_CellContentDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            //numPrecio.Focus();
            //numPrecio.Select();
        }

        private void dgvArticulos_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            numBonif.Enabled = true;
            numPrecio.Enabled = true;

            numPrecio.Focus();
            numPrecio.Select();

           

        }


    }
}
